home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / mus / play / DMODP35b.lha / DASModPlayer / Rexx / MakeList3.drx < prev    next >
Text File  |  1994-08-12  |  7KB  |  234 lines

  1. /*
  2.  
  3.    Make Module List 3, D.A.S ModulePlayer REXX-script for making modulelists
  4.    with information like module name, channels and the author.
  5.  
  6.    All modules are listed by the author i.e. first comes modules by Unknown
  7.    then comes modules by author number 2 and so on...
  8.  
  9.    Note that this script was done within an hour by clipping parts from
  10.    other makelist.drx scripts so the coding may be something else than
  11.    neat and optimised.
  12.  
  13.     V0.01 09.08.94 First version
  14.     V0.02 09.08.94 Added "empty" author checking (no printing of
  15.                     authors without any modules)
  16. */
  17.  
  18. OPTIONS Results
  19. ADDRESS 'DASMP'
  20.  
  21. signal on error
  22. signal on syntax
  23. signal on ioerr
  24. signal on break_c
  25. signal on break_d
  26.  
  27. unknownauthor = 'Unknown'
  28. handlewidth = 30
  29. realnwidth = 30
  30. typewidth = 10
  31. indexwidth = 3
  32. namewidth = 24
  33. authorwidth = 40
  34. stylewidth = 15
  35. timewidth = 6
  36. datewidth = 9
  37. realnwidth = 40
  38. chanwidth = 2
  39. lineline='-----------------------------------------------------------------------'
  40. emptyline = ''
  41. MODCOUNT
  42. modcounter=result
  43. endlist=modcounter
  44. startlist=0
  45. say ''
  46. say 'Modulelist generator 3 V0.02 by Pauli Porkka'
  47. say 'Warn! This script may take a looooooong time to execute.'
  48. say ''
  49.  
  50. listmode = 'ALL'
  51.  
  52. call writech(stdout, 'List to File or Screen (F/S)? ')
  53. answer = readln(stdin)
  54. answer = upper(answer)
  55. if answer='F' then DO
  56.    listfile='YES'
  57.    call writech(stdout, 'Enter pathfilename for the list? ')
  58.    listfilename = readln(stdin)
  59.    END
  60. else
  61.    listfile='NO'
  62. say ''
  63. listheader3 = 'Listing extracted from D.A.S.MP by MakeList3.drx V0.02'
  64. listheader1 = left("Num", indexwidth)' 'left("Module name", namewidth)' 'left("Chans", chanwidth+2)' 'left("Type", typewidth)
  65. listheader2 = lineline
  66. if listfile='YES' then DO
  67.    call open(listfilehandle, listfilename, 'W')
  68.    call writeln(listfilehandle, listheader3)
  69.    call writeln(listfilehandle, listheader1)
  70.    call writeln(listfilehandle, listheader2)
  71.    END
  72. else DO
  73.    say listheader3
  74.    say listheader1
  75.    say listheader2
  76.    END
  77. AUTHORCOUNT
  78. authcount=result
  79. firstauth = 0
  80. listedauth= 0
  81. DO currentauth = firstauth to authcount-1
  82.     MOVETOAUTH currentauth
  83.     GETAUTHNAME
  84.     authname=result
  85.     isstyle=index(authname,'-')
  86.     if isstyle ~= 1 THEN DO
  87.         listedauth = listedauth+1
  88.         authspec=authname
  89.         CALL ParseAuthorName(authspec)
  90.         handlename=result
  91.         CALL ParseAuthorName2(authspec)    
  92.         realname=result
  93.         countedauthors=0
  94.         modulecount = 0
  95.         modspec = 0
  96.         DO modspec = startlist to endlist-1
  97.             MOVETO modspec
  98.             GETAUTHOR
  99.             authorspec=result
  100.             if authorspec=authspec THEN countedauthors=countedauthors+1
  101.         END
  102.         if countedauthors~=0 THEN DO
  103.         linetoprint= left(handlename, handlewidth)' 'left(realname, realnwidth)
  104.         if listfile='YES' then DO
  105.          call writeln(listfilehandle, linetoprint)
  106.          call writeln(listfilehandle, emptyline)         
  107.         END
  108.          else DO
  109.             say linetoprint
  110.             say emptyline
  111.          END
  112.  
  113.         modulecount = 0
  114.         modspec = 0    
  115.             DO modspec= startlist to endlist-1
  116.              MOVETO modspec
  117.              GETAUTHOR
  118.              authorspec=result
  119.              if authspec=authorspec THEN DO
  120.               AuthorName=authorspec
  121.               Call ParseAuthorName(AuthorName)
  122.               authorspecC=result   /* Parsed (<xx> removed) author spec for printing*/
  123.               PANAuthorName=authorspec
  124.               Call PANParseAuthorName(PANAuthorName)
  125.               authorspec=result    /* Only name or handle remains*/
  126.               Call PrintingSystem
  127.             END /* END if authspec=aut..*/
  128.             END /* END DO modspec=star...*/
  129.  
  130.         if listfile='YES' then DO
  131.          call writeln(listfilehandle, lineline)
  132.          call writeln(listfilehandle, emptyline)
  133.         END
  134.          else DO
  135.             say lineline
  136.             say emptyline
  137.         END
  138.     END /* if countedauthors~= 0...*/
  139.     END /* END if isstyle ~=....*/
  140.     END /* END DO currentauth =....*/
  141.  
  142. if listfile='YES' then
  143.    call close(listfilehandle)
  144.  
  145. EXIT
  146.  
  147. error:
  148. syntax:
  149. say 'Error at line 'sigl' in MakeList V0.13'
  150. EXIT
  151.  
  152. break_c:
  153. break_d:
  154. say 'Received a BREAK signal, aborted...'
  155. EXIT
  156.  
  157. ioerr:
  158. say 'I/O Error at line 'sigl
  159. EXIT
  160.  
  161. /* Procedure for printing out the information to screen or file */
  162. PrintingSystem:
  163.       modulecount= modulecount+1
  164.       MODNAME
  165.       namespec=result
  166.       GETCHANS
  167.       chanspec=result
  168.       GETTYPE
  169.       typespec=result
  170.       FilePath=realnamespec
  171.       Call ParseFileName(FilePath)
  172.       realnamespec=result
  173.       moduleline = left(modulecount, indexwidth)' 'left(namespec, namewidth)' ['left(chanspec, chanwidth)'] 'left(typespec, typewidth)
  174.           if listfile='NO' then DO
  175.              say moduleline
  176.              if answerrn='Y' then DO
  177.                 MODREALNAME
  178.                 realnamespec=result
  179.                 modulelineb = left('  ', indexwidth)' == 'left(realnamespec, realnwidth)
  180.                 say modulelineb
  181.              END
  182.           END
  183.           Else DO
  184.              call writeln(listfilehandle, moduleline)
  185.              if answerrn='Y' then DO
  186.                     MODREALNAME
  187.                     realnamespec=result
  188.                     modulelineb = left('  ', indexwidth)' == 'left(realnamespec, realnwidth)
  189.                     call writeln(listfilehandle, modulelineb)
  190.              END
  191.           END
  192.  
  193. /* procedure for returning the real file name of mdoule. Path stripped.*/
  194. ParseFileName: procedure
  195.     parse arg FilePath
  196.     return substr(FilePath, max(lastpos(':', FilePath),lastpos('/', FilePath))+1)
  197.  
  198.  
  199. /* procedure for removing the <xxx> (real author name) if exists*/
  200. ParseAuthorName: procedure
  201.     parse arg AuthorName
  202.     RealNameExists=Index(AuthorName, '<')
  203.         DivPos = pos('<', AuthorName)
  204.     if DivPos = 0
  205.         then return AuthorName
  206.     else
  207.         return strip(left(AuthorName, DivPos-1),'T','<')
  208. /* prcedure for removing the "<xxx>" AND "/xxxx" */
  209. PANParseAuthorName: procedure
  210.     parse arg AuthorName
  211.     Slash=lastpos('/', AuthorName)
  212.     Birdie=lastpos('<', AuthorName)
  213.     
  214.     if ((Slash =0) & (Birdie = 0)) then DO
  215.         RetAuth= AuthorName
  216.     END
  217.     else DO
  218.         DivPos = Slash
  219.         if Slash = 0 
  220.             then DivPos=Birdie
  221.         RetAuth=left(AuthorName,DivPos-1)
  222.     END
  223.         return RetAuth
  224. ParseAuthorName2: procedure
  225.     parse arg AuthorName
  226.         DivPos = pos('<', AuthorName)
  227.     if DivPos = 0
  228.         then return ' '
  229.     else
  230.         authlen=length(AuthorName)
  231.         return right(AuthorName, authlen-DivPos+1)
  232.  
  233. EXIT
  234.